# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Contributor: Ray Donnelly <mingw.android@gmail.com>

_realname=python2

pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=2.7.7
pkgrel=1
_pybasever=2.7
pkgdesc="A high-level scripting language (mingw-w64)"
arch=('any')
license=('PSF')
url="http://www.python.org/"
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs" 
        "${MINGW_PACKAGE_PREFIX}-expat"
        "${MINGW_PACKAGE_PREFIX}-bzip2"
        "${MINGW_PACKAGE_PREFIX}-gdbm"
        "${MINGW_PACKAGE_PREFIX}-readline"
        "${MINGW_PACKAGE_PREFIX}-openssl"
        "${MINGW_PACKAGE_PREFIX}-libffi"
        "${MINGW_PACKAGE_PREFIX}-zlib"
        "${MINGW_PACKAGE_PREFIX}-tcl"
        "${MINGW_PACKAGE_PREFIX}-tk")
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc" "${MINGW_PACKAGE_PREFIX}-pkg-config" "${MINGW_PACKAGE_PREFIX}-ncurses")
options=('!makeflags' 'staticlibs' 'strip')
source=("http://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz"
        0100-MINGW-BASE-use-NT-thread-model.patch
        0110-MINGW-translate-gcc-internal-defines-to-python-platf.patch
        0120-MINGW-use-header-in-lowercase.patch
        0130-MINGW-configure-MACHDEP-and-platform-for-build.patch
        0140-MINGW-preset-configure-defaults.patch
        0150-MINGW-configure-largefile-support-for-windows-builds.patch
        0160-MINGW-add-wincrypt.h-in-Python-random.c.patch
        0180-MINGW-init-system-calls.patch
        0190-MINGW-detect-REPARSE_DATA_BUFFER.patch
        0200-MINGW-build-in-windows-modules-winreg.patch
        0210-MINGW-determine-if-pwdmodule-should-be-used.patch
        0220-MINGW-default-sys.path-calculations-for-windows-plat.patch
        0230-MINGW-AC_LIBOBJ-replacement-of-fileblocks.patch
        0250-MINGW-compiler-customize-mingw-cygwin-compilers.patch
        0270-CYGWIN-issue13756-Python-make-fail-on-cygwin.patch
        0280-issue17219-add-current-dir-in-library-path-if-buildi.patch
        0290-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch
        0300-MINGW-configure-for-shared-build.patch
        0310-MINGW-dynamic-loading-support.patch
        0320-MINGW-implement-exec-prefix.patch
        0330-MINGW-ignore-main-program-for-frozen-scripts.patch
        0340-MINGW-setup-exclude-termios-module.patch
        0350-MINGW-setup-_multiprocessing-module.patch
        0360-MINGW-setup-select-module.patch
        0370-MINGW-setup-_ctypes-module-with-system-libffi.patch
        0380-MINGW-defect-winsock2-and-setup-_socket-module.patch
        0390-MINGW-exclude-unix-only-modules.patch
        0400-MINGW-setup-msvcrt-module.patch
        0410-MINGW-build-extensions-with-GCC.patch
        0420-MINGW-use-Mingw32CCompiler-as-default-compiler-for-m.patch
        0430-MINGW-find-import-library.patch
        0440-MINGW-setup-_ssl-module.patch
        0450-MINGW-export-_PyNode_SizeOf-as-PyAPI-for-parser-modu.patch
        0460-MINGW-generalization-of-posix-build-in-sysconfig.py.patch
        0462-MINGW-support-stdcall-without-underscore.patch
        0480-MINGW-generalization-of-posix-build-in-distutils-sys.patch
        0490-MINGW-customize-site.patch
        0500-add-python-config-sh.patch
        0510-cross-darwin-feature.patch
        0520-py3k-mingw-ntthreads-vs-pthreads.patch
        0530-mingw-system-libffi.patch
        0540-mingw-semicolon-DELIM.patch
        0550-mingw-regen-use-stddef_h.patch
        0560-mingw-use-posix-getpath.patch
        0565-mingw-add-ModuleFileName-dir-to-PATH.patch
        0570-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch
        0580-mingw32-test-REPARSE_DATA_BUFFER.patch
        0590-mingw-INSTALL_SHARED-LDLIBRARY-LIBPL.patch
        0600-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch
        0610-msys-cygwin-semi-native-build-sysconfig.patch
        0620-mingw-sysconfig-like-posix.patch
        0630-mingw-_winapi_as_builtin_for_Popen_in_cygwinccompiler.patch
        0640-mingw-x86_64-size_t-format-specifier-pid_t.patch
        0650-cross-dont-add-multiarch-paths-if-cross-compiling.patch
        0660-mingw-use-backslashes-in-compileall-py.patch
        0670-msys-convert_path-fix-and-root-hack.patch
        0690-allow-static-tcltk.patch
        0710-CROSS-properly-detect-WINDOW-_flags-for-different-nc.patch
        0720-mingw-pdcurses_ISPAD.patch
        0740-grammar-fixes.patch
        0750-Add-interp-Python-DESTSHARED-to-PYTHONPATH-b4-pybuilddir-txt-dir.patch
        0760-msys-monkeypatch-os-system-via-sh-exe.patch
        0770-msys-replace-slashes-used-in-io-redirection.patch
        0790-mingw-add-_exec_prefix-for-tcltk-dlls.patch
        0800-mingw-install-layout-as-posix.patch
        0820-mingw-reorder-bininstall-ln-symlink-creation.patch
        0830-add-build-sysroot-config-option.patch
        0840-add-builddir-to-library_dirs.patch
        0850-cross-PYTHON_FOR_BUILD-gteq-276-and-fullpath-it.patch
        1000-dont-link-with-gettext.patch
        1010-ctypes-python-dll.patch
        1020-gdbm-module-includes.patch
        1030-use-gnu_printf-in-format.patch)


prepare() {
  cd "${srcdir}/Python-${pkgver}"

  # these are created by patches
  rm -f Misc/config_mingw Misc/cross_mingw32 Misc/python-config.sh.in Misc/cross_mingw32 Misc/python-config-u.sh.in Python/fileblocks.c

  plain "Apply Roumen Petrov's core patches (15)"
  patch -p1 -i "${srcdir}"/0100-MINGW-BASE-use-NT-thread-model.patch
  patch -p1 -i "${srcdir}"/0110-MINGW-translate-gcc-internal-defines-to-python-platf.patch
  patch -p1 -i "${srcdir}"/0120-MINGW-use-header-in-lowercase.patch
  patch -p1 -i "${srcdir}"/0130-MINGW-configure-MACHDEP-and-platform-for-build.patch
  patch -p1 -i "${srcdir}"/0140-MINGW-preset-configure-defaults.patch
  patch -p1 -i "${srcdir}"/0150-MINGW-configure-largefile-support-for-windows-builds.patch
  patch -p1 -i "${srcdir}"/0160-MINGW-add-wincrypt.h-in-Python-random.c.patch
  patch -p1 -i "${srcdir}"/0180-MINGW-init-system-calls.patch
  patch -p1 -i "${srcdir}"/0190-MINGW-detect-REPARSE_DATA_BUFFER.patch
  patch -p1 -i "${srcdir}"/0200-MINGW-build-in-windows-modules-winreg.patch
  patch -p1 -i "${srcdir}"/0210-MINGW-determine-if-pwdmodule-should-be-used.patch
  patch -p1 -i "${srcdir}"/0220-MINGW-default-sys.path-calculations-for-windows-plat.patch
  patch -p1 -i "${srcdir}"/0230-MINGW-AC_LIBOBJ-replacement-of-fileblocks.patch

  plain "Apply Roumen Petrov's compiler patch (2)"
  patch -p1 -i "${srcdir}"/0250-MINGW-compiler-customize-mingw-cygwin-compilers.patch

  plain "Apply Roumen Petrov's extensions patches (23)"
  patch -p1 -i "${srcdir}"/0270-CYGWIN-issue13756-Python-make-fail-on-cygwin.patch
  patch -p1 -i "${srcdir}"/0280-issue17219-add-current-dir-in-library-path-if-buildi.patch
  patch -p1 -i "${srcdir}"/0290-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch
  patch -p1 -i "${srcdir}"/0300-MINGW-configure-for-shared-build.patch
  patch -p1 -i "${srcdir}"/0310-MINGW-dynamic-loading-support.patch
  patch -p1 -i "${srcdir}"/0320-MINGW-implement-exec-prefix.patch
  patch -p1 -i "${srcdir}"/0330-MINGW-ignore-main-program-for-frozen-scripts.patch
  patch -p1 -i "${srcdir}"/0340-MINGW-setup-exclude-termios-module.patch
  patch -p1 -i "${srcdir}"/0350-MINGW-setup-_multiprocessing-module.patch
  patch -p1 -i "${srcdir}"/0360-MINGW-setup-select-module.patch
  patch -p1 -i "${srcdir}"/0370-MINGW-setup-_ctypes-module-with-system-libffi.patch
  patch -p1 -i "${srcdir}"/0380-MINGW-defect-winsock2-and-setup-_socket-module.patch
  patch -p1 -i "${srcdir}"/0390-MINGW-exclude-unix-only-modules.patch
  patch -p1 -i "${srcdir}"/0400-MINGW-setup-msvcrt-module.patch
  patch -p1 -i "${srcdir}"/0410-MINGW-build-extensions-with-GCC.patch
  patch -p1 -i "${srcdir}"/0420-MINGW-use-Mingw32CCompiler-as-default-compiler-for-m.patch
  patch -p1 -i "${srcdir}"/0430-MINGW-find-import-library.patch
  patch -p1 -i "${srcdir}"/0440-MINGW-setup-_ssl-module.patch
  patch -p1 -i "${srcdir}"/0450-MINGW-export-_PyNode_SizeOf-as-PyAPI-for-parser-modu.patch
  patch -p1 -i "${srcdir}"/0460-MINGW-generalization-of-posix-build-in-sysconfig.py.patch
  patch -p1 -i "${srcdir}"/0462-MINGW-support-stdcall-without-underscore.patch
  patch -p1 -i "${srcdir}"/0480-MINGW-generalization-of-posix-build-in-distutils-sys.patch
  patch -p1 -i "${srcdir}"/0490-MINGW-customize-site.patch

  plain "Apply Ray Donnelly's general/cross patches (32)"
  patch -p1 -i "${srcdir}"/0500-add-python-config-sh.patch
  patch -p1 -i "${srcdir}"/0510-cross-darwin-feature.patch
  patch -p1 -i "${srcdir}"/0520-py3k-mingw-ntthreads-vs-pthreads.patch
  patch -p1 -i "${srcdir}"/0530-mingw-system-libffi.patch
  patch -p1 -i "${srcdir}"/0540-mingw-semicolon-DELIM.patch
  patch -p1 -i "${srcdir}"/0550-mingw-regen-use-stddef_h.patch
  patch -p1 -i "${srcdir}"/0560-mingw-use-posix-getpath.patch
  patch -p1 -i "${srcdir}"/0565-mingw-add-ModuleFileName-dir-to-PATH.patch
  patch -p1 -i "${srcdir}"/0570-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch
  patch -p1 -i "${srcdir}"/0580-mingw32-test-REPARSE_DATA_BUFFER.patch
  patch -p1 -i "${srcdir}"/0590-mingw-INSTALL_SHARED-LDLIBRARY-LIBPL.patch
  patch -p1 -i "${srcdir}"/0600-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch
  patch -p1 -i "${srcdir}"/0610-msys-cygwin-semi-native-build-sysconfig.patch
  patch -p1 -i "${srcdir}"/0620-mingw-sysconfig-like-posix.patch
  patch -p1 -i "${srcdir}"/0630-mingw-_winapi_as_builtin_for_Popen_in_cygwinccompiler.patch
  patch -p1 -i "${srcdir}"/0640-mingw-x86_64-size_t-format-specifier-pid_t.patch
  patch -p1 -i "${srcdir}"/0650-cross-dont-add-multiarch-paths-if-cross-compiling.patch
  patch -p1 -i "${srcdir}"/0660-mingw-use-backslashes-in-compileall-py.patch
  patch -p1 -i "${srcdir}"/0670-msys-convert_path-fix-and-root-hack.patch
  patch -p1 -i "${srcdir}"/0690-allow-static-tcltk.patch
  patch -p1 -i "${srcdir}"/0710-CROSS-properly-detect-WINDOW-_flags-for-different-nc.patch
  patch -p1 -i "${srcdir}"/0720-mingw-pdcurses_ISPAD.patch
  patch -p1 -i "${srcdir}"/0740-grammar-fixes.patch
  patch -p1 -i "${srcdir}"/0750-Add-interp-Python-DESTSHARED-to-PYTHONPATH-b4-pybuilddir-txt-dir.patch
  patch -p1 -i "${srcdir}"/0760-msys-monkeypatch-os-system-via-sh-exe.patch
  patch -p1 -i "${srcdir}"/0770-msys-replace-slashes-used-in-io-redirection.patch
  patch -p1 -i "${srcdir}"/0790-mingw-add-_exec_prefix-for-tcltk-dlls.patch
  patch -p1 -i "${srcdir}"/0800-mingw-install-layout-as-posix.patch
  patch -p1 -i "${srcdir}"/0820-mingw-reorder-bininstall-ln-symlink-creation.patch
  patch -p1 -i "${srcdir}"/0830-add-build-sysroot-config-option.patch
  patch -p1 -i "${srcdir}"/0840-add-builddir-to-library_dirs.patch
  patch -p1 -i "${srcdir}"/0850-cross-PYTHON_FOR_BUILD-gteq-276-and-fullpath-it.patch

  plain "Apply Alexey Pavlov's mingw-w64 patches (2)"
  patch -p1 -i "${srcdir}"/1000-dont-link-with-gettext.patch
  patch -p1 -i "${srcdir}"/1010-ctypes-python-dll.patch
  patch -p1 -i "${srcdir}"/1020-gdbm-module-includes.patch
  patch -p1 -i "${srcdir}"/1030-use-gnu_printf-in-format.patch

  autoreconf -vfi

  # Temporary workaround for FS#22322
  # See http://bugs.python.org/issue10835 for upstream report
  #sed -i "/progname =/s/python/python${_pybasever}/" Python/pythonrun.c

  # Enable built-in SQLite module to load extensions (fix FS#22122)
  sed -i "/SQLITE_OMIT_LOAD_EXTENSION/d" setup.py

  # FS#23997
  sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/python2|" Lib/cgi.py

  sed -i "s/python2.3/python2/g" Lib/distutils/tests/test_build_scripts.py \
  Lib/distutils/tests/test_install_scripts.py Tools/scripts/gprof2html.py

  touch Include/graminit.h
  touch Python/graminit.c
  touch Parser/Python.asdl
  touch Parser/asdl.py
  touch Parser/asdl_c.py
  touch Include/Python-ast.h
  touch Python/Python-ast.c
  echo \"\" > Parser/pgen.stamp
    
  # Ensure that we are using the system copy of various libraries (expat, zlib and libffi),
  # rather than copies shipped in the tarball
  rm -r Modules/expat
  rm -r Modules/zlib
  rm -r Modules/_ctypes/{darwin,libffi}*
}

build() {
  pushd ${MINGW_PREFIX} > /dev/null
  export PREFIX_WIN=`pwd -W`
  popd > /dev/null

  CFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -I$PREFIX_WIN/${MINGW_CHOST}/include "
  CXXFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -I$PREFIX_WIN/include -I$PREFIX_WIN/include/ncursesw -I$MINGWHOME_WIN/$HOST/include "
  CPPFLAGS+=" -I$PREFIX_WIN/include -I$PREFIX_WIN/include/ncursesw -I$PREFIX_WIN/${MINGW_CHOST}/include "
  LDFLAGS+=" -L$PREFIX_WIN/${MINGW_CHOST}/lib -L$PREFIX_WIN/lib "
  if check_option "strip" "y"; then
    LDFLAGS+=" -s "
  fi
  if check_option "debug" "n"; then
    CFLAGS+=" -DNDEBUG "
    CXXFLAGS+=" -DNDEBUG "
  else
    plain " -DDEBUG -DPy_DEBUG -D_DEBUG does not work unfortunately .."
    #    CFLAGS+=" -DDEBUG -DPy_DEBUG -D_DEBUG "
    #    CXXFLAGS+=" -DDEBUG -DPy_DEBUG -D_DEBUG "
    CFLAGS+=" -O0 -ggdb"
    CXXFLAGS+=" -O0 -ggdb"
  fi

  LIBFFI_INC=`${MINGW_PREFIX}/bin/pkg-config libffi --cflags-only-I | sed "s|\-I||g"`
  pushd ${LIBFFI_INC} > /dev/null
  export LIBFFI_INCLUDEDIR=`pwd -W`
  popd > /dev/null

  # Workaround for conftest error on 64-bit builds
  export ac_cv_working_tzset=no

  mkdir -p "${srcdir}/build-${CARCH}" && cd "${srcdir}/build-${CARCH}"
  MSYSTEM=MINGW ../Python-${pkgver}/configure \
    --prefix=${MINGW_PREFIX} \
    --host=${MINGW_CHOST} \
    --build=${MINGW_CHOST} \
    --enable-shared \
    --with-threads \
    --with-system-expat \
    --with-system-ffi \
    OPT=""
    #--with-dbmliborder='gdbm:ndbm'
  make
}

check() {
  cd "${srcdir}/build-${CARCH}"
  make test
}

package() {
  cd "${srcdir}/build-${CARCH}"
  MSYSTEM=MINGW \
  MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \
  make install DESTDIR="$pkgdir"
  
  mv "${pkgdir}${MINGW_PREFIX}"/bin/smtpd.py "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/

  # Copy python import library to $prefix/lib because some programs can't find it in other locations
  cp -f "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config/libpython${_pybasever}.dll.a "${pkgdir}${MINGW_PREFIX}"/lib/libpython${_pybasever}.dll.a
  
  # some useful "stuff"
  install -dm755 "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/{i18n,scripts}
  install -m755 "${srcdir}/Python-${pkgver}"/Tools/i18n/{msgfmt,pygettext}.py "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/i18n/
  install -m755 "${srcdir}/Python-${pkgver}"/Tools/scripts/{README,*py} "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/scripts/

  # clean up #!s
  find "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/ -name '*.py' | \
    xargs sed -i "s|#[ ]*![ ]*/usr/bin/env python$|#!/usr/bin/env python2|"

  # clean-up reference to build directory
  sed -i "s#${srcdir}/Python-${pkgver}:##" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config/Makefile

  for fscripts in 2to3 idle pydoc; do
    sed -e "s|${MINGW_PREFIX}/bin/python${_pybasever}.exe|/usr/bin/env python${_pybasever}.exe|g" -i "${pkgdir}${MINGW_PREFIX}"/bin/$fscripts
  done

  sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!/usr/bin/env python${_pybasever}.exe|" "${pkgdir}${MINGW_PREFIX}"/bin/python${_pybasever}-config
  sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!/usr/bin/env python${_pybasever}.exe|" "${pkgdir}${MINGW_PREFIX}"/bin/python2-config
  sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!/usr/bin/env python${_pybasever}.exe|" "${pkgdir}${MINGW_PREFIX}"/bin/python-config

  # fix permissons
  find ${pkgdir}${MINGW_PREFIX} -type f \( -name "*.dll" -o -name "*.exe" \) | xargs chmod 0755

  # Fix up two instances of MSYS2 paths in python-config.sh in-case the final consumer of the results are native executables.
  sed -i "s|${MINGW_PREFIX}|${PREFIX_WIN}|" "${pkgdir}${MINGW_PREFIX}"/bin/python-config.sh

  # replace paths in sysconfig
  sed -i "s|${pkgdir}${MINGW_PREFIX}|${MINGW_PREFIX}|g" \
    "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/_sysconfigdata.py \
    "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/smtpd.py

  # Create python executable with windows subsystem
  cp -f "${pkgdir}${MINGW_PREFIX}"/bin/python2.exe "${pkgdir}${MINGW_PREFIX}"/bin/python2w.exe
  ${MINGW_PREFIX}/bin/objcopy --subsystem windows "${pkgdir}${MINGW_PREFIX}"/bin/python2w.exe
}

sha1sums=('5f82557cac5abf18d1df6f8bb2029aa335b321f4'
          'f0273d9b758334ac9ab9cf4c825482bab566484f'
          '8720056f4d6d63824b4ac32d35cd2ffeeac7d8e7'
          '5026a34cf03b564bd0c12cc2503868f3a9ddaa0a'
          'eb68e3c00c475563757230e446196950322fe414'
          'c27b2fc7ef631ba1b6de12b90d7ee2667dd04e1e'
          '56345663c63bd87284dce740ff1eeb7e0f04c80c'
          '44df928c92f62431ad72e37a6cfe24c959e85a7d'
          '72c77f1b5d805e04b3ad710bf09d62f686ba1418'
          '7a2d283fbe930134a782ec9c2d0184afea724098'
          'fca482388c06f9c16e7030c6c34e6d48bcf1a114'
          'a327537167b565c1ad3e168e9fd5e406a5dd8f00'
          '1cf13fb03aa1db48e80898e5df1df36e6c8b4df2'
          '0334bba453271e21e18e7123e49eb5193cd8c1af'
          'bd32e0474d9d2bd863660463e7c0790f87cb0149'
          '8c4d1a914c7e23b1664d3d2ad213ad2fe3c55cdd'
          '442fd34bde35b7d494b7d382eefe864e8bdc1d11'
          '1d2e25a7ef759712eee2a8e39f47f4b4114fdb16'
          '1585a504fcde383f5a50a5c2a6d563a20259ab0c'
          '88ffd9f19e881e8910e05fd098b7aaa0131685ce'
          '06611901f2d01615f1a6abf13ac276ccead18213'
          '2119e3fcd6261f1f2737f7a15bcf51fd56dc1c45'
          'b6f150c6136e8bf7972bd26609eee1a7975604fc'
          '6c17ddf0e3703d26dc3c2b25d4596df1acd6953c'
          '10afdf1cd28f34e878b6d4405b96e2e4727c0c5c'
          '2375236d1593cc82392ee6e20f40fc47e35d008c'
          'cacb33451134fe13ccbfda69c0893b9b34bf89bf'
          'e69034b060cb551c713abc44f5a85f20ad26326d'
          '85c9a0b816effd0dfe35c1f3f40508875f629e8d'
          '98e8959691e8108c89efb5dfc7a889d595f0b166'
          '33ab8228350c37418f0cfab91d62ab698bc06f7a'
          '987d7ea795d8f692efc11a06a0d9e863a59d5283'
          'c6cbb6ffa7dcfc50c98e6a2a53a14348672d6a22'
          '9cf89fc1e41b82b02a582ad69cc7a6484b7e1a56'
          '0bd720cd5fefb1e49b6f9a9e9ad40bddaa9a0801'
          'b9639f8541b17f5f1866219d916eba6bd8430508'
          'c8f826541e7c2804acfb6898eebf8140cd9071dc'
          'b486b535acc29689eb60bede558054c542fb03c6'
          'cc374a68775364ab023c359e39f32ec2b157e107'
          'e66ba693668031cc7ebddf23297d806bd961df39'
          '264577b58d9dd8821e4536c804e45058eac56713'
          '78e3b9c0a23f98966f0b5b3a5d3b6763def534c7'
          'ed5669a30d8f0f4b8c596210bf2d451597208759'
          'e02977ab6bc82d5036dd10bde4453f6e064b2a0e'
          '4f91a8077dc786ac7a0f95f44263f4f03715bbdc'
          '5b4a7b82453be858ac8af2f24c7090557dbb19a8'
          'cef051f56dfee11f346fe72cb6cca2ed5531dcc2'
          'bb7a065bddea160fadafe7a051bb3ed368662d59'
          '2895f0e5dd35bf5d6726185a23ac9b81178be749'
          '9a278cbceeea4d7ba3ff45ef5afd34a7bd3d7c81'
          '43e65d273830d8f4d39bde7f6130e6ec80a5c9cd'
          '5869fe58aff0770fcfdadc1c58d2f004c962273e'
          '5a07ecb26083f260f66138e10b88640781107ab3'
          '91b2259657f6a608da4566fed7a2686d692877ad'
          '6d5fe7c9aa4b54ebfe9b2a75b429d277c3296196'
          'd3a86a8d1a987b7eebef7e95cacf03b28a5d1c1e'
          '9aed7ff1da63bcfce62aa6c71e5260f2f073dd3f'
          'bf43cf44de17fff3de40da466e994464c10242d1'
          'd7c66f2b19c09ce7a20339598bc5d507581632a9'
          'f427ec0606981c20235474a50fafdd355faff673'
          '54aaa8ebee0e5cfed1d1e0d9631a98f70f14b4ab'
          'fca1c1a521a33ac705c519317094527df914cc76'
          '20b8b90c5909327b1a2c0ace87e3560b5e23cfde'
          'f75fb4c42a248011ae70c7d354a7057c48db68e9'
          'b51cae393d17f4eb6562e86d407a6f73e27ab5bf'
          '78673acb7dc9cbf41b243d8b327b6ed7ed435d04'
          '1589b83e7688449113374e9a2395009e3d754318'
          '430ed5b5794e4081b7de2016bc10b2d220e29f24'
          'b570caceaf451c0869d840fc06dae526f083046b'
          '9ee357eb87550e1ce5c8fd359a976a24bf9ff697'
          '439eaa06db994ddb724e5ad6a459bbddb5089527'
          '5601ab657dc701aea3b16cf96be782b45262a6b4'
          'a5b4f74cfdc0cd8148ae0c2b7d080e08ac73bc5a'
          '68c82e5127023cfc0907d052d9d5f177ada1323b')
